package thread;

//编写代码, 实现线程安全版本的单例模式
class SingleTon1 {
    //饿汉模式，即在类加载时就实例化出对象
    private final SingleTon1 instance = new SingleTon1();
    private SingleTon1() {}
    public SingleTon1 getInstance() {
        return instance;
    }
}

class SingleTon2 {
    //
    // 禁止指令重排序， 防止未实例完成的对象里的属性 被非法使用
    private volatile SingleTon2 instance;
    private SingleTon2() {}
    public SingleTon2 getInstance() {
        // 第一次对象实例化后，后续并不涉及 修改操作，无需重复加锁判断
        if(instance == null) {
            // 在多线程 并发执行下，防止 创建多个实例
            synchronized (this) {
                if(instance == null) {
                    instance = new SingleTon2();
                }
            }
        }
        return instance;
    }
}
public class demo11 {

    public static void main(String[] args) {

    }
}
